#include "SinglePlayerSpel.h"

#include "GameController.h"
#include <sstream>

void SinglePlayerSpel::setData(char * mapNaam, char * spelerNaam, char * robotKleur)
{
	m_mapNaam = new char[strlen(mapNaam)+1];
	strcpy(m_mapNaam,mapNaam);

	m_spelerNaam = new char[strlen(spelerNaam)+1];
	strcpy(m_spelerNaam,spelerNaam);

	m_robotKleur = new char[strlen(robotKleur)+1];
	strcpy(m_robotKleur,robotKleur);

	m_robotKleur = robotKleur;

}


void SinglePlayerSpel::setData(char * laadFile)
{
	m_laadSpel = true;
	m_laadFile = new char[strlen(laadFile) +1];
	strcpy(m_laadFile,laadFile);

	SpelParser * spelParser = new SpelParser;
	spelParser->parseFile(laadFile);

	spelParser->getMapNaam(&m_mapNaam);
	spelParser->getSpelerNaam(&m_spelerNaam);
	spelParser->getRobotKleur(&m_robotKleur);

	free(spelParser);
}

void SinglePlayerSpel::start()
{
	if(!m_laadSpel) 
		maakSpel();
	 else 
		laadSpel();

	while((m_gameFinished_Flag = m_gameController->checkWinnaar()) != 1)
	{
		this->m_gameController->volgendeRonde();
	}

	m_gameController->beeindigSpel();
		
}

void SinglePlayerSpel::maakSpel() 
{
	/* de spelercxtn aanmaken */

	//menselijke speler
	this->addNwSpeler(m_spelerNaam,m_robotKleur);
	
	// 5 artificiele spelers
	for(int i = 0; i < 5; i++){
		string nummer;
		stringstream out;
		out << i;
		nummer = out.str();
		addAiSpeler(string("AI") + nummer, string(this->randomColor()) );
	}

	/* voeg OBSERVERS (spelers) toe aan het SUBJECT (gamecontroller) */
	for(size_t i = 0; i < m_spelerCxts->size(); i++)
		m_gameController->addSpelerContext(&(m_spelerCxts->at(i)) );

	/* de map aanmaken */
	this->setMap();



}

void SinglePlayerSpel::laadSpel() 
{
	SpelParser * spelParser = new SpelParser;
	spelParser->parseFile(m_laadFile);

	/* temp variabelen waarin telkens de info gelezen zal worden */
	int temp_id;
	int temp_schade;
	int temp_levens;
	int temp_posX;
	int temp_posY;
	int temp_checkPoint;

	/* de spelercxtn aanmaken */

	//menselijke speler
	spelParser->getSpelerSituatie(&temp_levens, &temp_schade, &temp_posX, &temp_posY, &temp_checkPoint);
	this->addNwSpeler(m_spelerNaam,m_robotKleur);

	// set vars
	m_spelerCxts->at(0).getRobot().setPositie(temp_posX,temp_posY);
	m_spelerCxts->at(0).getRobot().setCheckPoint(temp_checkPoint);
	m_spelerCxts->at(0).getRobot().setLevens(temp_levens);
	m_spelerCxts->at(0).getRobot().setSchade(temp_schade);
	

	// 5 artificiele spelers
	for(int i = 1; i <= 5; i++){
		spelParser->getAISituatie(i, &temp_levens, &temp_schade, &temp_posX, &temp_posY, &temp_checkPoint);
		string nummer;
		stringstream out;
		out << i;
		nummer = out.str();
		addAiSpeler(string("AI") + nummer, string(this->randomColor()) );

		// set vars
		m_spelerCxts->at(i).getRobot().setPositie(temp_posX,temp_posY);
		m_spelerCxts->at(i).getRobot().setCheckPoint(temp_checkPoint);
		m_spelerCxts->at(i).getRobot().setLevens(temp_levens);
		m_spelerCxts->at(i).getRobot().setSchade(temp_schade);
	}

	/* voeg OBSERVERS (spelers) toe aan het SUBJECT (gamecontroller) */
	for(size_t i = 0; i < m_spelerCxts->size(); i++)
		m_gameController->addSpelerContext(&(m_spelerCxts->at(i)) );


	/* de map aanmaken */
	this->setMap();

	free(spelParser);
}

